home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctj8408.arc
/
INKEY.BAS
next >
Wrap
BASIC Source File
|
1986-09-14
|
6KB
|
130 lines
10 DEFINT A-Z: SCREEN 0,0,0,0: WIDTH 80
15 FG=7: BF=0: COLOR FG,BG: CLS
20 DEF SEG: POKE 106,0
30 YES = NOT NO: NO = NOT YES
40 ESC = 27: ESC$ = CHR$(ESC)
45 ENTR$ = CHR$(13)
50 BACKSPACE$ = CHR$(8)
60 LF.CURSOR=75: RT.CURSOR=77
65 END.KEY=79: INS.KEY=82: DEL.KEY=83
66 HOME=71: CTRL.END=117
70 GOTO 700
90 '
91 ''''inkey routine''''
92 '
100 'FL is the field length, passed
105 'to this routine by the main program.
110 '
120 INS.LENGTH = 0: CURSOR.POS = 1
125 SOUND 80, .03: MOVE.IT = NO: KY = 0
130 CURSOR.START = POS(0)
140 CHAR.ACCEPT.CODE = FIX( FL / 100 )
150 FL = FL - CHAR.ACCEPT.CODE*100
160 IN$ = SPACE$(FL)
170 IF PROMPT$<>"" THEN IN$=LEFT$(PROMPT$+SPACE$(FL),FL)
175 INS.LENGTH=LEN(PROMPT$): PROMPT$=""
180 COLOR BG,FG
190 LOCATE, CURSOR.START, 1: PRINT IN$;
200 LOCATE, CURSOR.START + CURSOR.POS - 1
210 N$ = INKEY$: IF N$ = "" THEN 210
220 IF LEN(N$) = 1 THEN 350
230 ' Lines 240 thru 330 check for special keys.
235 'You can omit this section if you do not need
236 'this function.
240 KY = ASC( RIGHT$(N$,1) )
245 ' check for edit keys:
250 IF KY=LF.CURSOR THEN IF CURSOR.POS>1 THEN CURSOR.POS=CURSOR.POS-1:GOTO 200 ELSE 320
260 IF KY=DEL.KEY THEN IN$=LEFT$(IN$, CURSOR.POS-1) + RIGHT$(IN$,FL-CURSOR.POS)+" ": INS.LENGTH = INS.LENGTH - 1: GOTO 190
270 IF KY=INS.KEY THEN IF INSERT=NO THEN INSERT=YES
275 LOCATE,,,4,7: GOTO 190 ELSE INSERT-NO: LOCATE,,,7: GOTO210
280 IF KY = HOME THEN CURSOR.POS = 1: GOTO 200
290 IF KY = CTRL.END THEN IN$ = LEFT$(IN$,CURSOR.POS-1) + SPACE$(FL - CURSOR.POS + 1): INS.LENGTH = CURSOR.POS - 1: GOTO 190
300 IF KY= RT.CURSOR THEN CURSOR.POS = CURSOR.POS - (CURSOR.POS < INS.LENGTH): GOTO 200
310 IF KY = END.KEY THEN CURSOR.POS = INS.LENGTH + 1: GOTO 200
320 MOVE.IT = YES
330 GOTO 600 'not an edit key, but is a special key: end input.
340 '
350 IF N$ = ESC$ THEN KY = ESC: IN$=N$: GOTO 320
360 IF CURSOR.POS = 1 THEN IF N$ = "-" OR N$ = "+" THEN IN$ = N$: COLOR FG,BG:LOCATE,,0: RETURN
370 IF CURSOR.POS > FL THEN 420
380 IF CHAR.ACCEPT.CODE = 0 AND N$ >= " " AND N$ <= "z" THEN 500
390 IF CHAR.ACCEPT.CODE = 1 AND N$ >= "0" AND N$ <= "9" THEN 500
400 IF CHAR.ACCEPT.CODE = 2 THEN IF N$ >= " " AND N$ <= "a" THEN 500 ELSE IF N$ >= "a" AND N$ <= "z" THEN N$ = CHR$(ASC(N$)-32): GOTO 500
410 'IF CHAR.ACCEPT.CODE=3 THEN IF MID$(ACCEPT$,CURSOR.POS,1) = ? THEN ..
420 IF N$ = ENTR$ THEN 600
430 IF N$ <> BACKSPACE$ OR CURSOR.POS = 1 THEN 210
440 '
450 IN$ = LEFT$(IN$, CURSOR.POS-2) +RIGHT$(IN$, FL -CURSOR.POS+1)+" "
460 INS.LENGTH = INS.LENGTH -1
470 CURSOR.POS = CURSOR.POS -1
480 GOTO 190
490 '
500 IF NOT INSERT THEN MID$(IN$, CURSOR.POS, 1) = N$: GOTO 550
510 IF INS.LENGTH >= FL THEN 210
520 IN$= LEFT$(LEFT$(IN$,CURSOR.POS-1)+N$+RIGHT$(IN$,FL-CURSOR.POS+1),FL)
530 CURSOR.POS = CURSOR.POS + 1: INS.LENGTH = INS.LENGTH + 1
540 GOTO 190
550 IF CURSOR.POS = 1 THEN IN$ = N$ + SPACE$(FL - 1): PRINT IN$;: LOCATE, CURSOR.START: INS.LENGTH = 1
560 PRINT N$;
570 CURSOR.POS = CURSOR.POS + 1
580 IF CURSOR.POS > INS.LENGTH THEN INS.LENGTH = CURSOR.POS - 1
590 IF FL > 1 THEN 190
600 COLOR FG,BG: LOCATE, CURSOR.START, 0, 7: PRINT IN$;
610 IN$ = LEFT$(IN$, INS.LENGTH): INSERT = NO
620 RETURN
670 '
680 ' main menu:
690 '
700 CLS
710 LOCATE 4,33: PRINT " MAIN MENU "
720 LOCATE 10,33: PRINT "1 Enter Data"
730 LOCATE 11,33: PRINT "2 Print Reports"
740 LOCATE 12,33: PRINT "3 Save Data"
750 LOCATE 14,33: PRINT " SELECT "
760 LOCATE 14,33: FL = 101: GOSUB 100
770 IF IN$ < "1" OR IN$ > "3" THEN 760
780 ON VAL(IN$) GOTO 1000, 2000, 3000
990 '
1000 'enter data:
1010 '
1020 CLS: LOCATE 4,35: PRINT "DATA ENTRY": I=1
1030 LOCATE 10,20: PRINT "NAME: " NAM$(I)
1040 LOCATE 12,20: PRINT "ADDRESS: " ADDR$(I)
1050 LOCATE 14,20: PRINT "CITY: " CITY$(I)
1060 LOCATE 16,20: PRINT "STATE: " STATE$(I)
1070 LOCATE 16,40: PRINT "ZIP: " ZIP$(I)
1079 '
1080 'name:
1090 LOCATE 10,30: FL = 25: PROMPT$ = NAM$(I): GOSUB 100
1095 IF IN$ = ESC$ THEN 700
1100 IF MOVE.IT THEN IF I > 1 THEN I = I - 1: GOTO 1030
1110 NAM$(I) = IN$
1120 'addr:
1130 LOCATE 12,30: FL = 20: PROMPT$ = ADDR$(I): GOSUB 100
1140 IF MOVE.IT THEN 1090
1150 ADDR$(I) = IN$
1160 'city:
1170 LOCATE 14,30: FL = 15: PROMPT$ = CITY$(I): GOSUB 100
1180 IF MOVE.IT THEN 1130
1190 CITY$(I) = IN$
1200 'state:
1210 LOCATE 16,30: FL = 202: PROMPT$ = STATE$(I): GOSUB 100
1220 IF MOVE.IT THEN 1170
1230 STATES$="OK TX AL GA FL AZ SC MI"
1240 LOCATE 18,30
1250 IF INSTR(STATES$, IN$) = 0 THEN PRINT "INVALID STATE": GOTO 1210 ELSE PRINT SPACE$(13)
1260 STATE$(I) = IN$
1270 'zip
1280 LOCATE 16,47: FL = 105: PROMPT$ = ZIP$(I): GOSUB 100
1290 IF MOVE.IT THEN 1210
1300 LOCATE 18,46
1310 IF VAL(IN$)<30000 OR VAL(IN$)>89999! THEN PRINT"INVALID ZIP": GOTO 1280: ELSE PRINT SPACE$(11)
1320 ZIP$(I) = IN$
1330 'loop:
1340 I = I + 1
1350 GOTO 1030
2000 '
2010 GOTO 700
3000 '
3010 GOTO 700